Deno v2
#Deno
リリース時期
What we got wrong about HTTP imports - 2024/09にリリース予定とのこと
追記) 正式リリース
2024/10/09に正式リリースされました
主な変更
deno:URLのサポート
https:形式のimportは、大規模なコードベースにおいては依存解決の重複が課題となる可能性があります
それを解消するために、semverベースの依存解決の仕組みが検討されているようです
Denoでpackage.jsonやnpmパッケージのサポートが入った理由について
これは最終的にjsr:URLとして導入されることになりました (jsr)
code:typescript
import { ulid } from "jsr:@std/ulid@0.219.1";
上記のようにjsr:という形式のimportが検出されると、Denoの本体に組み込まれたパッケージマネージャーがJSRというパッケージレジストリと連携して、semverの解決が行われます
注意点として、https:形式のimportは引き続きサポートされます
ワークスペースサポート
これはすでに導入済み (deno-weekly/articles/2023/11/19)
ただ、Deno v2向けにまだ細かな対応などが残っている模様 (deno.json workspace support for Deno 2 (#22942))
deno_stdではすでに導入されています
fresh v2でも活用されています
Deno v1.45でnpm Workspacesのサポートが入りました
破壊的変更
Deno v2からいくつかのAPIの削除や挙動の変更などが実施される予定です
DENO_FUTUREに1を指定することで、Deno v2で導入予定の破壊的変更を有効化することができます
Node.jsユーザー向けの変更
deno addコマンド
--devオプションのサポート - もしpackage.jsonがあれば、指定されたパッケージをdevDependenciesに追加してくれます (feat(add/install): Flag to add dev dependency to package.json (#25495))
deno installコマンド
v1においてdeno installコマンドはインターネット上に公開された任意のスクリプトをローカルにインストールするためのコマンドという位置づけでした
例) deno-uddやdeployctlなどといったDeno製のCLIツールをインストールする際に使用されることが想定されていました
Deno v2からはデフォルトでdeno installはdeno addのエイリアスとして振る舞うように挙動が変わる想定です (これはnpmなどと使用体験を近づけるための変更です)
deno addはjsrまたはnpmパッケージをプロジェクトに追加する際に使用するためのコマンドです
deno installコマンドにv1と同様の振る舞いをさせたい場合は、-gオプションを明示的に指定する必要があります
deno uninstallコマンド
v1においてdeno uninstallコマンドはdeno installによってインストールされたスクリプトを削除するためのコマンドという位置づけでした
Deno v2ではdeno uninstallコマンドはdeno removeコマンドのエイリアスとして振る舞うように挙動が変更されます
deno removeコマンドはプロジェクトからjsrまたはnpmパッケージを削除するためのコマンドです
BYONM
package.jsonがある場合は、BYONMがデフォルトで有効化されるよう挙動が変更されます
セキュリティの強化
--allow-importの導入
--allow-runパーミッションに関する振る舞いの修正
allow-listなしで--allow-runを利用すると警告が表示されるように
リバートされました (Revert "feat: warn when using --allow-run with no allow list" (denoland/deno#26021))
allow-listに指定された各実行可能ファイルが--deny-writeに自動で設定されるように
LD_PRELOADなどのLD_*から始まる環境変数が設定されている場合、--allow-allが要求されるよう振る舞いが変更
各種非推奨APIの削除
Deno本体の非推奨APIが削除される予定です
以下でマイグレーションガイドが公開されています
deno-docs/runtime/manual/advanced/migrate_deprecations.md at 8e0e4b1717395d82200c3646b90e9077e6201d06 · denoland/deno-docs
周辺ライブラリ
deno_stdのv1は?
jsrのリリースとワークスペース機能の活用により、deno_stdを各モジュールごとに別々にバージョン管理することが可能になりました
これにより、deno_std全体でv1をリリースする、というよりは安定している各モジュールから少しずつv1が公開されていく流れになりそうです (deno-weekly/articles/2024/04/21)
例) deno_std/collectionsなどの安定性の高いモジュールから順にv1をリリースしていき、deno_std/expectなどの新しめのモジュールについてはより安定してきてからv1をリリースする
また、これらの影響により、deno_stdはDeno本体とは独立してリリースされていきます